from flask import Flask, render_template, request, jsonify, send_from_directory
from 环境配置 import tools
import os

from mCnLunar import cnlunar_day
from azureTTS import Mtts
from douBao import Doubao
app = Flask(__name__)
# 配置文件路径，使用相对路径   上班前 7:25
config_file = 'conf.json'
mdata={'init_prompt': """深厚积累了有关 黄历玄学知识、 短视频脚本创作时，你需要充分融合这些专业背景知识； 根据用户输入的主题创作需求，进行短视频脚本创作  多多使用口语容易让人理解的话  开头为  ,日日看黄历 事事皆顺利  需要详细的 以下 值日 做什么类型的事情比较顺利 什么是不建议做(结合生活) 值神是谁 这一天需要注意的是 建议做或不建议做的事情 (结合生活)   说一下 属相相冲的  根据幸运色推荐衣服 和麻将的方位  注意避免的 不要带 '儿' 这个字 根据输入的消息来润色脚本不需要写镜头  画面 和天气 也不要输出表格文章 410 字左右""",
    'video_scripts': [],
    'cnlunar_str': {},
    'prompts':[],
    'days': 1,
    "start_prompt": "开头起手式..."
}
conf = {
    'db_base_url': "https://ark.cn-beijing.volces.com/api/v3",
    "db_api_key": "c837ff21-6e5f-49ba-960e-66e2edfe42c7",
    "azure_ttsapi_key": "78to0jpxK3pAxCHIE2j0STKfNe2RBLzEDu9LvkYILmQwR15Qs0oCJQQJ99BBACYeBjFXJ3w3AAAYACOGcDCg",
    'azure_region': "eastus",
    'azure_voice_name': "zh-CN-XiaoxiaoMultilingualNeural",

    'init_prompt':"初始提示词",
        'video_scripts': [],
    'cnlunar_str': {},
    'prompts':[],
    'days': 1,
    "start_prompt": "开头起手式..."
}

# 检查配置文件是否存在，如果不存在则创建并写入默认值
if not os.path.exists(config_file):
    tools.save_conf(config_file, conf)

# 初始化全局设置
Settings = tools.read_conf(config_file) if os.path.exists(config_file) else conf
# 初始化 AutoTTS 实例
print(f"Settings: {Settings}")
mclunar = cnlunar_day(conf )

# 搜索当前目录下所有文件夹找到名为init.json 返回该json对象
def search_init_json():
    for root, dirs, files in os.walk('.'):
        for file in files:
            if file == 'init.json':
                return os.path.join(root, file)
    return None


# 获得对应的阴历信息
@app.route('/getlunars', methods=['POST'])
def getdays():

    data = request.get_json()
    # 传入的是 日期字符串数组
    str_key=data['dateArr']
    Settings["day"]= len(str_key)
    print(f'str_key:....天数{    Settings["day"]}..........')

    # str_key  传入的是 日期字符串数组  返回的是  日期字符串数组 对应的 阴历信息  字典
    cnlunar_str= mclunar.cnlunar_days(str_key)
    print(f'day_arr: {cnlunar_str}')
    Settings["cnlunar_str"]=cnlunar_str
    return jsonify({
        'message': '获取 阴历信息  成功! ',
        'cnlunar_str': cnlunar_str
    })

#根据阴历生成提示词
# @app.route('/getscript', methods=['GET', 'POST'])
# def getscript():
#     doubaoVS = Doubao(conf.db_base_url, conf.db_api_key, conf.init_prompt)
#     data = request.get_json()
#     # 传入的是 日期字符串数组
#     str_key=data['dateArr']
#     Settings["day"]= len(str_key)
#     print(f'str_key:....天数{    Settings["day"]}..........')
#
#     # str_key  传入的是 日期字符串数组  返回的是  日期字符串数组 对应的 阴历信息  字典
#     cnlunar_str= mclunar.get_video_text(str_key)
#     video_scripts=doubaoVS.generate_text_arr(cnlunar_str)
#     print(f'day_arr: {video_scripts}')
#     Settings["cnlunar_str"]=video_scripts
#     return jsonify({
#         'message': '获取 阴历信息  成功! ',
#         'cnlunar_str': video_scripts
#     })


@app.route('/getscript', methods=['POST'])
def get_script():
    data = request.get_json()
    print(f"data             1: {data}")
    mfrom = data.get('mfrom')
    print(f"mfrom  1: {mfrom}")
    if mfrom is None:
        return jsonify({"error": "db_base_url is missing"}), 400
    # 其他处理逻辑
    return jsonify({"video_scripts": "example script"})





@app.route('/save', methods=['POST'])
def save():
    # 接收 JSON 数据
    data = request.get_json()
    # 打印 JSON 数据到控制台
    print(data)
    # 调用 saveConfig 函数
    # 返回包含接收到的 JSON 数据和 saveConfig 结果的响应
    return jsonify({
        'received_data': data
    }), 200

 #
 # try:
 #        doubaoVS = Doubao(Settings['db_base_url'], Settings['db_api_key'], Settings['init_prompt'])
 #
 #        if request.method == 'POST':
 #            data = request.get_json()
 #        else:  # GET 请求
 #            data = request.args.to_dict()
 #            # 假设 GET 请求中 prompts 是一个以逗号分隔的字符串
 #            if 'prompts' in data:
 #                data['prompts'] = [{'name': f'prompt_{i}', 'value': prompt} for i, prompt in enumerate(data['prompts'].split(','))]
 #
 #
 #        print( data )
 #        text_name=""
 #
 #        for key in data :
 #            text_name=key
 #            if text_name!="":
 #                print(f"key 找到了: {key}")
 #                break
 #
 #
 #
 #        generated_text = doubaoVS.generate_text(data[text_name])
 #        cnlunar_str=Settings['cnlunar_str']
 #        for key,v in cnlunar_str:
 #            print(f"key: {key}")
 #
 #            Settings['cnlunar_str'] .append()
 #
 #
 #
 #        # print("生成的脚本: ", generated_text)
 #        return jsonify({"video_scripts": generated_text,"text_name":text_name}), 200
 #
 #    except Exception as e:
 #        print('处理请求时出错:', e)
 #        return jsonify({'error': str(e)}), 400



@app.route('/run', methods=['POST'])
def run_tts():
    global Settings
    # rec = saveConfig(request)
    Settings = request.get_json()
    print(f"Settings............{Settings}")
    result={}
    if 'video_scripts' in Settings:

        tts_char = Settings['video_scripts']
        mTTS = Mtts(Settings["azure_ttsapi_key"], Settings["azure_region"], Settings["azure_voice_name"])
        print(f"tts_char: {tts_char}")

        for script in tts_char:
            try:
                result  = mTTS.text_to_speech_to_file(script, script + ".mp3")
                print(f"result: {result}")
            except Exception as e:
                return jsonify({"error": f"生成语音出错  \n tts_char:{tts_char}"}), 400
        return jsonify({
            'message': 'ok',
            'Settings': Settings
        }), 200
    else:
        # 处理 'video_scripts' 不在 data 中的情况
        return jsonify({"error": "请求数据中缺少 'video_scripts' 字段"}), 400


# 定义路由，用于返回 favicon.ico 文件
@app.route('/favicon.ico')
def favicon():
    return send_from_directory('static', 'logo.ico', mimetype='image/vnd.microsoft.icon')

# 定义路由，用于下载 static 目录下的文件
@app.route('/download/<path:filename>')
def download_file(filename):
    return send_from_directory('static', filename, as_attachment=True)

@app.route('/', methods=['GET'])
def index():
    print("打开主页")
    return render_template('index.html')


#获取配置参数返回给前端
@app.route('/config', methods=['GET'])
def get_config():
    global Settings
    print("获取数据")

    Settings = tools.read_conf(config_file)

    # Settings["prompts"] = []
    # Settings["cnlunar_str"] = []
    # Settings["start_prompt"] = []
    # Settings["days"] = 0

    return jsonify({"data": Settings})




if __name__ == '__main__':
    app.run(debug=True, host='127.0.0.1', port=8899)